565265de84266373c16f8480fd0b6622d789a8a1,src/freenet/store/BerkeleyDBFreenetStore.java,BerkeleyDBFreenetStore,overwriteKeyUnchanged,#StorableBlock#number[]#number[]#number[]#number[]#,1371

Before Change



			StoreBlock storeBlock = (StoreBlock) storeBlockTupleBinding.entryToObject(blockDBE);
						
			synchronized(storeRAF) {
				storeRAF.seek(storeBlock.offset*(long)(dataBlockSize+headerBlockSize));
				storeRAF.write(header);
				storeRAF.write(data);
				if(keysRAF != null) {
					keysRAF.seek(storeBlock.offset * keyLength);
					keysRAF.write(fullKey);
				}
			}
			

After Change


	/**
	 * Overwrite a block with a new block which has the same key.
	 */
	private boolean overwriteKeyUnchanged(StorableBlock block, byte[] routingkey, byte[] fullKey, byte[] data, byte[] header) throws IOException {
		synchronized(this) {
			if(closed)
				return false;
		}
		
		DatabaseEntry routingkeyDBE = new DatabaseEntry(routingkey);
		DatabaseEntry blockDBE = new DatabaseEntry();
		Cursor c = null;
		Transaction t = null;
		try {
			t = environment.beginTransaction(null,null);
			c = keysDB.openCursor(t,null);

			// Lock the record.
			if(c.getSearchKey(routingkeyDBE,blockDBE,LockMode.RMW)
					!=OperationStatus.SUCCESS) {
				c.close();
				c = null;
				t.abort();
				t = null;
				return false;
			}

			StoreBlock storeBlock = (StoreBlock) storeBlockTupleBinding.entryToObject(blockDBE);
						
			fcWriteStore(storeBlock.offset, header, data);
			if (keysRAF != null) {
				fcWriteKey(storeBlock.offset, fullKey);
			}
			
			// Unlock record.